Cloud Runのチュートリアルを試してみた
データアナリティクス事業本部の根本です。現在Cloud Runを深掘りしていて、その過程でチュートリアルも試してみました。これからCloud Runを動かしたい、という方は読んでみてください。
この記事の対象者
- Cloud Runを動かしてみたいと思っているひと
前提条件
- gcloudコマンドが使用できること。Cloud Run,Cloud Build,Artifact RegistryのAPIが使用できること(※)
※筆者は編集者権限
のユーザにて実行しています。
今回実施するチュートリアル
Google Cloudの公式リファレンスにある下記チュートリアル(python版)を実施しました。
やってみる
準備
まずはローカルPCで作業ディレクトリを作成して移動します。
mkdir helloworld cd helloworld
チュートリアルのコードをコピーして、main.py
のファイルを作成して貼り付けます。
import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): """Example Hello World route.""" name = os.environ.get("NAME", "World") return f"Hello {name}!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
コードの内容を解説します。
@app.route("/") def hello_world(): name = os.environ.get("NAME", "World") return f"Hello {name}!"
この部分では、ルート"/"にアクセスすると、環境変数"NAME"の値に基づいて「Hello [NAME]!」というメッセージを返します。
環境変数NAME
が設定されていない場合はWorld
が返されるので、「Hello World!」が呼び出し元に返却されます。
if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
スクリプトが直接実行された場合の動作です。
直接実行の場合デバッグモードを有効にし、ホスト"0.0.0.0"およびポート8080で実行されます。今回は使用しません。
続いて、requirements.txt
のファイルを作成して、以下のコードを貼り付けます。
Flask==3.0.0 gunicorn==20.1.0 Werkzeug==3.0.1
デプロイ
デプロイは以下のコマンドで行います。
gcloud run deploy
デプロイコマンドを実行すると以下のように聞かれるのでそれぞれキーを入力して回答します。
Source code location (/Users/xxx/Documents/yyy/helloworld)
ソースコードの場所です。ソースコードが保存されている場所がカレントディレクトリなのであればそのままEnterを押下します。
Service name (helloworld):
Cloud Runのサービス名です。()内の名前helloworld
から変更する場合は名前を入力します。そのままでよければEnterを押下します。
Please specify a region: [1] africa-south1 [2] asia-east1 [3] asia-east2 [4] asia-northeast1 [5] asia-northeast2 [6] asia-northeast3 ・・・省略
リージョンの選択になります。asia-northeast1
の場合であれば4
を入力してEnterを押下します。
Allow unauthenticated invocations to [helloworld] (y/N)?
認証しないで呼び出せるようにするかどうかの選択です。y
を押下するとURLを叩くと誰でも呼び出すことが可能となりますので注意が必要です。今回はN
の認証ありで作成しました。
数分待つとデプロイが完了して、以下のようなメッセージが出力されます(抜粋です)
Done. Service [helloworld] revision [helloworld-00001-xqm] has been deployed and is serving 100 percent of traffic. Service URL: 作成されたURL
Service URL
が今回作成したコンテナを呼び出すURLとなります。
以下のcurlコマンドで呼び出しをします。
curl https://作成されたURL \ -H "Authorization: bearer $(gcloud auth print-identity-token)"
認証ありで作成したのでBearer認証
にて認証をしています。
gcloud auth print-identity-token
コマンドでヘッダーに認証トークンをセットしています。
上記コマンドを発行して
Hello World!
と出力されればチュートリアルは成功です。
補足
今回のチュートリアルはローカルでソースコードを作成し、それを元にデプロイしましたがこの場合のデプロイは以下の流れになります。
- ローカルのソースコードをコンテナイメージ化
- コンテナイメージをArtifact Registryリポジトリにpush
- Artifact RegistryリポジトリからCloud Runコンテナイメージをデプロイ
よって、デプロイコマンド実行後はCloud RunとArtifact Registryにリソースが作成されています。実際に画面で確認してみます。
以下はArtifact Registryリポジトリです。
デプロイしたhelloworld
コンテナを確認することができました。
以下はCloud Runの画面です。
指定したサービス名helloworld
で作成されていました。
リソースを削除する際に、Cloud Runのサービスを削除してもArtifact Registryに作成されたイメージは削除されないので使用しない場合はこちらも削除をお忘れなく。
おわりに
今回はチュートリアルを試してみただけですが、簡単な手順でコンテナがデプロイできてサービス化できるのは本当にすごいと思います。Cloud Buildからのデプロイなどもこれから試してみたいと思います。
この記事がどなたかのお役に立てば幸いです。それではまた。